/*
练习3：函数编程 （函数调用与参数传递）
1.将实践练习2中的第1题利用函数的思想进行修改。要求函数参数中包含数组名。
*/
#include<stdio.h>
struct student
{
	char name[8];
	int score;
};
void tj(int);
int main()
{
	int a;
	printf("学生成绩统计\n");
	printf("是否要开始统计(1/0):");
	scanf("%d",&a);
	if(a==1)tj(a);
	return 0;
}
void tj(int a)
{
	struct student st[30];
	int sum,ave;
	int A,B,C,D,E;
	int n,i,j;

	do
	{
		printf("班级人数n(0<=n<=30) n=");
		scanf("%d",&n);
		if(n<1||n>30)printf("输入错误\n");
	}while(n<1||n>30);

	A=0,B=0,C=0,D=0,E=0;
	sum=0;
	for(i=0;i<n;i++)
	{
		printf("name%d：",i+1);
		scanf("%s",st[i].name);
		do
		{
			printf("score%d：",i+1);
			scanf ("%d",&st[i].score);
			if(st[i].score<0||st[i].score>100)printf("输入错误\n");
		}while(st[i].score<0||st[i].score>100);
		if(st[i].score<60)E++;
		if(st[i].score>=60&&st[i].score<=69)D++;
		if(st[i].score>=70&&st[i].score<=79)C++;
		if(st[i].score>=80&&st[i].score<=89)B++;
		if(st[i].score>=90)A++;
		sum+=st[i].score;
	}
	ave=sum/n;
	printf("sum=%d\n",sum);
	printf("ave=%d\n",ave);
	printf("\n");
	
	printf("不及格人数为：%d\n",E);
	printf("不及格名单为:\n");
	for(i=0;i<n;i++)
	{
		if(st[i].score<60)printf("%-5s%d\n",&st[i].name,st[i].score);
	}
	printf("\n");

	for(i=0,j=0;i<n;i++)
	{
		if(st[i].score>=ave)j++;
	}
	printf("平均分之上的学生人数为：%d\n",j);
	printf("平均分之上的学生名单为：\n");
	for(i=0;i<n;i++)
	{
		if(st[i].score>=ave)printf("%-5s%d\n",&st[i].name,st[i].score);
	}
	printf("\n");
	
	printf("分数段      学生人数     图形\n");
	printf("E:<60       %-2d(%.2f%%)   ",E,(float)E/n*100);
	for(i=0;i<E;i++)printf("*");
	printf("\n");

	printf("D:60-69     %-2d(%.2f%%)   ",D,(float)D/n*100);
	for(i=0;i<D;i++)printf("*");
	printf("\n");

	printf("C:70-79     %-2d(%.2f%%)   ",C,(float)C/n*100);
	for(i=0;i<C;i++)printf("*");
	printf("\n");

	printf("B:80-89     %-2d(%.2f%%)   ",B,(float)B/n*100);
	for(i=0;i<B;i++)printf("*");
	printf("\n");

	printf("A:>=90      %-2d(%.2f%%)   ",A,(float)A/n*100);
	for(i=0;i<A;i++)printf("*");
	printf("\n");
}